package com.huang.tiger.utils;


import cn.hutool.core.date.DateUtil;

import java.util.Date;

/**
 * 时间工具类
 */
public class DateUtils {

    /**
     * 时间格式
     */
    private static final String DATE_FORMAT_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
    private static final String DATE_FORMAT_YYYY_MM_DD_HH_MM    = "yyyy-MM-dd HH:mm";
    private static final String DATE_FORMAT_YYYY_MM_DD_HH       = "yyyy-MM-dd HH";
    private static final String DATE_FORMAT_YYYY_MM_DD          = "yyyy-MM-dd";
    private static final String DATE_FORMAT_YYYY_MM             = "yyyy-MM";
    private static final String DATE_FORMAT_YYYY                = "yyyy";
    private static final Date NOW_TIME = new Date();
    private static final Integer MONDAY_INT = 1;




    /**
     * 时间 Date 格式化成 字符串
     * @param formatDate
     * @param formatStr
     * @return
     */
    public static String dateFormatStr(Date formatDate,String formatStr){
        if(StringUtils.isBlank(formatStr)){
            formatStr = DATE_FORMAT_YYYY_MM_DD_HH_MM_SS;
        }
        if(formatDate == null){
            formatDate = NOW_TIME;
        }
        return DateUtil.format(formatDate, formatStr);
    }

    /**
     * 字符串 解析成 时间Date
     * @param dateStr
     * @param formatStr
     * @return
     */
    public static Date strParseDate(String dateStr,String formatStr){
        if(StringUtils.isBlank(dateStr)){
            return NOW_TIME;
        }
        if(StringUtils.isBlank(formatStr)){
            formatStr = DATE_FORMAT_YYYY_MM_DD_HH_MM_SS;
        }

        return DateUtil.parse(dateStr,formatStr);
    }

    /**
     * 获取某个时间Date 的年份
     * @param date
     * @return
     */
    public static Integer year(Date date){
        if(ObjectUtils.isNull(date)) return DateUtil.year(NOW_TIME);
        return DateUtil.year(date);
    }

    /**
     * 获取某个时间 Str 的年份
     * @param dateStr 时间
     * @return
     */
    public static Integer year(String dateStr){
        Date date = strParseDate(dateStr, DATE_FORMAT_YYYY_MM_DD_HH_MM_SS);
        Integer year = year(date);
        return year;
    }

    /**
     * 获取某个时间Date 的月份
     * @param date
     * @return
     */
    public static Integer month(Date date){
        if(ObjectUtils.isNull(date)) return DateUtil.month(NOW_TIME);
        return DateUtil.month(date);
    }

    /**
     * 获取某个时间 Str 的月份
     * @param dateStr 时间
     * @return
     */
    public static Integer month(String dateStr){
        Date date = strParseDate(dateStr, DATE_FORMAT_YYYY_MM_DD_HH_MM_SS);
        Integer month = month(date);
        return month;
    }

    /**
     * 获取某个时间Date 的日期（几号）
     * @param date
     * @return
     */
    public static Integer day(Date date){
        if(ObjectUtils.isNull(date)) return DateUtil.dayOfMonth(NOW_TIME);
        return DateUtil.dayOfMonth(date);
    }

    /**
     * 获取某个时间 Str 的日期（几号）
     * @param dateStr 时间
     * @return
     */
    public static Integer day(String dateStr){
        Date date = strParseDate(dateStr, DATE_FORMAT_YYYY_MM_DD_HH_MM_SS);
        Integer day = day(date);
        return day;
    }

    /**
     * 获取当前时间的 str 字符串
     * @return
     */
    public static String nowDateStr(){
        return nowDateStr(DATE_FORMAT_YYYY_MM_DD_HH_MM_SS);
    }

    /**
     * 获取当前时间的 str 字符串 指定日期格式
     * @param dateFormatStr 日期格式
     * @return
     */
    public static String nowDateStr(String dateFormatStr){
        return dateFormatStr(NOW_TIME,dateFormatStr);
    }








}
